package top.infopub.mgr.hr.dao;


import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import top.infopub.generic.GenericDao;
import top.infopub.mgr.hr.domain.OrgInfoDomain;
import top.infopub.mgr.hr.vo.OrgInfoVo;
import top.infopub.model.hr.OrgInfo;
import top.infopub.model.mkt.PreProject;

import java.util.List;


/** 公司信息(HR_ORG_INFO) **/
@Repository
public interface OrgInfoDao extends GenericDao<OrgInfo, String> {
    /**
     * 查询人员绑定的有效的公司 
     * @param staffId
     * @return 
     * @see
     */
    List<OrgInfo> queryStaffValidOrg(String staffId);

    /**
     * 根据id查询公司详情（包含部门）
     * @param id
     * @return 
     * @see
     */
    OrgInfoDomain selectById(String id);
    
    /**
     * 根据公司名查询公司
     * @param compName 公司名
     * @return 
     * @see
     */
    OrgInfo selectByCompName(String compName);
    
    /**
     * 根据公司名和id查询公司记录
     * @param compName 公司名
     * @param id 公司Id
     * @return 
     * @see
     */
    OrgInfo selectByCompNameAndId(@Param("compName")String compName, @Param("id")String id);

    /**
     * 获取当前公司与其子孙公司
     * @return 
     * @see
     */
    List<OrgInfo> selectVisibleOrgOfSelf(String orgId);

    /**
     * 根据条件查询公司记录
     * @param orgInfoVo
     * @return 
     * @see
     */
    Page<OrgInfoDomain> selectByVoWhere(OrgInfoVo orgInfoVo);

    /**
     * 查询公司类型为总部公司的记录
     * @return
     * @see
     */
    List<OrgInfo> selectByTypes1();
    
    /**
     * 查询公司类型为总部公司和区域公司的记录
     * @return
     * @see
     */
    List<OrgInfo> selectByTypes2();

    /**
     * 新增公司记录（自带id）
     * @param orgInfo 
     * @see
     */
    void insertById(OrgInfo orgInfo);

    /**
     * 根据可见公司id查询公司记录
     * @param visibleOrgIds 可见公司id
     * @return 
     * @see
     */
    List<OrgInfo> selectByVisibleIds(@Param("ids")String visibleOrgIds);
    
    /**
     * 根据可见公司id查询项目编号不为空公司记录
     * @param visibleOrgIds 可见公司id
     * @return 
     * @see
     */
    List<OrgInfo> selectByVisibleIdsAndProCodeIsnOtNull(@Param("ids")String visibleOrgIds);
    
    /**
     * 根据查询项目编号不为空公司记录
     * @return 
     * @see
     */
    List<OrgInfo> selectByProCodeIsnOtNull();

    /**
     * 根据公司id查询关联的项目信息
     * @param id 主键id
     * @return 
     * @see
     */
    PreProject selectProjectById(String id);
    
    /**
     * 根据项目公司关联项目编号查询公司信息
     */
    OrgInfo queryByProjectCode(@Param("proId")String proId);

    /**
     * 根据可见的公司id查询公司记录且过滤区域公司
     * @param visibleOrgIds 可见公司id
     * @return 
     * @see
     */
    List<OrgInfo> selectByVisibleIdsAndNotArea(@Param("ids")String visibleOrgIds);

    /**
     * 根据登录人员SGUID查询所属公司SGUID和TYPES
     * @param sguid 人员SGUID
     * @return
     */
    OrgInfo queryOrgTypesByAuthUserId(@Param("sguid") String sguid);

    /**
     * 根据types和公司sguid查询公司信息
     * @param types
     * @param sguid
     * @return
     */
    List<OrgInfo> queryOrgInfoByWhere(@Param("types") String types, @Param("sguid") String sguid);
}